ExtJS Tree Panel একটি বিশেষ ধরনের কম্পোনেন্ট যা হায়ারারকিক্যাল ডেটা বা ডেটা স্ট্রাকচার উপস্থাপন করতে ব্যবহৃত হয়। এটি সাধারণত ডেটার মধ্যে প্যারেন্ট-চাইল্ড সম্পর্ক প্রদর্শন করতে ব্যবহৃত হয়, যেমন ফাইল সিস্টেম, ক্যাটেগরি হায়ারারকি, এবং আরও অনেক কিছু।
এছাড়া, Nested Data Structures হল এমন ডেটা যা একটি ভেতরের ডেটা স্ট্রাকচার ধারণ করে, যেমন একটি অগণিত তালিকা বা অবজেক্ট যা অন্য একটি তালিকা বা অবজেক্ট ধারণ করে। ExtJS তে Tree Panel এমন ধরনের ডেটা পরিচালনা করতে অত্যন্ত কার্যকরী।
Tree Panel একটি ExtJS কম্পোনেন্ট যা হায়ারারকিক্যাল ডেটা প্রদর্শন করার জন্য ব্যবহৃত হয়। এটি একটি বা একাধিক স্তরের মধ্যে সম্পর্কিত ডেটা ভিজ্যুয়ালাইজ করতে সাহায্য করে। উদাহরণস্বরূপ, একটি ফোল্ডার-ফাইল সিস্টেম যেখানে ফোল্ডারগুলোর মধ্যে অন্যান্য ফোল্ডার এবং ফাইল থাকতে পারে।
Tree Panel তৈরির জন্য Ext.tree.Panel ক্লাস ব্যবহার করা হয়। এর মধ্যে store, root এবং columns কনফিগারেশন ব্যবহার করা হয়। Tree Panel ডেটা স্টোরে nested data রাখে এবং সেটি হায়ারারকিক্যালভাবে প্রদর্শন করে।
Ext.create('Ext.tree.Panel', {
title: 'File Explorer', // প্যানেলের শিরোনাম
width: 400,
height: 300,
store: Ext.create('Ext.data.TreeStore', {
root: {
text: 'Root Folder', // রুট ফোল্ডারের নাম
expanded: true, // রুট ফোল্ডারটি এক্সপ্যান্ড করা
children: [ // nested children (ফোল্ডার ও ফাইল)
{
text: 'Documents',
expanded: true,
children: [
{ text: 'File 1.txt', leaf: true },
{ text: 'File 2.txt', leaf: true }
]
},
{
text: 'Images',
expanded: true,
children: [
{ text: 'Image 1.jpg', leaf: true },
{ text: 'Image 2.png', leaf: true }
]
}
]
}
}),
renderTo: Ext.getBody() // কম্পোনেন্টটিকে DOM এ রেন্ডার করা
});
এখানে:
TreeStore
ব্যবহার করা হয়েছে, যেখানে root এবং children দ্বারা হায়ারারকিক্যাল ডেটা সংরক্ষণ করা হচ্ছে।true
দিলে নোডটি একটি পাতা (leaf node) হিসেবে চিহ্নিত হয়, অর্থাৎ এটি আর কোনো চাইল্ড নোড ধারণ করে না।true
দিলে নোডটি এক্সপ্যান্ড করা হয় এবং তার চাইল্ড নোডগুলো প্রদর্শিত হয়।Tree Panel সাধারণত এমন ডেটা স্ট্রাকচার প্রদর্শন করে যা nested বা হায়ারারকিক্যাল থাকে, যেমন একটি ফোল্ডার সিস্টেম যেখানে ফোল্ডারের ভিতরে আরও ফোল্ডার থাকতে পারে এবং প্রতিটি ফোল্ডারের মধ্যে ফাইল থাকতে পারে।
ধরা যাক, একটি কোম্পানির ডিপার্টমেন্ট এবং এমপ্লয়ি সম্পর্কিত ডেটা রয়েছে। এটি TreeStore
ব্যবহার করে হায়ারারকিক্যালভাবে প্রদর্শন করা যাবে।
Ext.create('Ext.tree.Panel', {
title: 'Company Structure',
width: 400,
height: 300,
store: Ext.create('Ext.data.TreeStore', {
root: {
text: 'Company',
expanded: true,
children: [
{
text: 'HR Department',
expanded: true,
children: [
{ text: 'John Doe (Manager)', leaf: true },
{ text: 'Jane Smith (HR Assistant)', leaf: true }
]
},
{
text: 'Engineering Department',
expanded: true,
children: [
{ text: 'Mike Johnson (Engineer)', leaf: true },
{ text: 'Sarah Lee (Developer)', leaf: true }
]
}
]
}
}),
renderTo: Ext.getBody() // Tree Panel কে HTML body তে রেন্ডার করা
});
এখানে:
children
ব্যবহার করে আমরা ডিপার্টমেন্টের ভিতরে অন্যান্য ডিপার্টমেন্ট বা এমপ্লয়ি যুক্ত করেছি।leaf
: যেসব নোডের কোনো চাইল্ড নোড নেই, সেগুলির মধ্যে leaf: true
ব্যবহার করা হয়।viewConfig
: এটি আপনাকে কাস্টম ভিউ কনফিগারেশন করতে সাহায্য করে, যেমন নোডগুলির ড্র্যাগ-এন্ড-ড্রপ সক্ষম করা।listeners
: Tree Panel এ বিভিন্ন ইভেন্ট হ্যান্ডলার যোগ করা যেতে পারে, যেমন itemclick
, selectionchange
, ইত্যাদি।columns
: Tree Panel এ বিভিন্ন কলাম কনফিগারেশন করা যায় (যদি আপনি tree panel এর মধ্যে টেবিল-স্টাইল ডেটা প্রদর্শন করতে চান)।Tree Panel এ ড্র্যাগ-এন্ড-ড্রপ ফিচার যোগ করতে viewConfig
ব্যবহার করা যেতে পারে।
Ext.create('Ext.tree.Panel', {
title: 'Drag and Drop Example',
width: 400,
height: 300,
store: Ext.create('Ext.data.TreeStore', {
root: {
text: 'Root Node',
expanded: true,
children: [
{ text: 'Node 1', leaf: true },
{ text: 'Node 2', leaf: true }
]
}
}),
viewConfig: {
plugins: {
ptype: 'treeviewdragdrop' // ড্র্যাগ-এন্ড-ড্রপ সক্ষম করা
}
},
renderTo: Ext.getBody()
});
এখানে, ptype: 'treeviewdragdrop'
দ্বারা ড্র্যাগ-এন্ড-ড্রপ প্লাগইন সক্রিয় করা হয়েছে, যার মাধ্যমে ইউজাররা এক নোড থেকে অন্য নোডে ডেটা সরাতে পারবে।
TreeStore
ব্যবহার করে আপনি ডেটার রুট, চাইল্ড এবং পাতা (leaf) নোডগুলির হায়ারারকিক্যাল স্ট্রাকচার তৈরি করতে পারেন।Tree Panel ব্যবহার করে আপনি সহজেই হায়ারারকিক্যাল ডেটা প্রদর্শন এবং ম্যানিপুলেট করতে পারেন, যা একাধিক স্তরের সম্পর্ক এবং ডেটা স্ট্রাকচার ম্যানেজ করার জন্য উপযুক্ত।
ExtJS এর Tree Panel একটি প্যানেল কম্পোনেন্ট যা হায়ারারকিক্যাল ডেটা (ডেটার গাছ) প্রদর্শন করার জন্য ব্যবহৃত হয়। এটি সাধারনত ফাইল সিস্টেম, কেটাগরি লিস্ট, অথবা কোনো ডেটা সেটের সম্পর্কিত উপাদানগুলো প্রদর্শন করতে ব্যবহৃত হয়। Data Binding এর মাধ্যমে Tree Panel এবং মডেল/স্টোরের মধ্যে সংযোগ স্থাপন করা যায়, যার ফলে ডেটা আপডেট হলে UI স্বয়ংক্রিয়ভাবে রিফ্রেশ হয়।
Tree Panel ব্যবহার করে হায়ারারকিক্যাল ডেটা বা গাছের আকারে তথ্য প্রদর্শন করা হয়। ExtJS তে Ext.tree.Panel
কম্পোনেন্টটি এটি তৈরি করার জন্য ব্যবহৃত হয়।
Ext.create('Ext.tree.Panel', {
title: 'Simple TreePanel Example',
width: 300,
height: 200,
store: {
xtype: 'tree',
root: {
text: 'Root Node',
expanded: true,
children: [
{ text: 'Child Node 1', leaf: true },
{ text: 'Child Node 2', leaf: true },
{ text: 'Child Node 3', expanded: true, children: [
{ text: 'Grandchild Node 1', leaf: true },
{ text: 'Grandchild Node 2', leaf: true }
]}
]
}
},
rootVisible: false, // Root node will not be visible
renderTo: Ext.getBody()
});
xtype: 'tree'
দ্বারা স্টোর তৈরি হচ্ছে, যা গাছের ডেটা ধারণ করে।false
দিলে রুট নোডটি UI তে দেখানো হবে না।true
থাকে, তাহলে এটি একটি পাতা নোড হবে (এটি আর কোনো সন্তানের নোড ধারণ করবে না)।ExtJS তে Data Binding এর মাধ্যমে আপনি UI কম্পোনেন্ট (যেমন Tree Panel) এবং ডেটার মধ্যে সংযোগ স্থাপন করতে পারেন, যাতে ডেটা আপডেট হলে UI স্বয়ংক্রিয়ভাবে আপডেট হয়। Data Binding এর মাধ্যমে, যখন স্টোরে কোনো পরিবর্তন হয়, তখন তা অটোমেটিক্যালি Tree Panel এর সাথে সিঙ্ক্রোনাইজ হয়।
Ext.create('Ext.tree.Panel', {
title: 'TreePanel with Data Binding',
width: 300,
height: 200,
store: {
xtype: 'tree',
model: 'MyApp.model.TreeNode', // মডেল নির্ধারণ করা হচ্ছে
root: {
text: 'Root Node',
expanded: true,
children: [
{ text: 'Child Node 1', leaf: true },
{ text: 'Child Node 2', leaf: true },
{ text: 'Child Node 3', expanded: true, children: [
{ text: 'Grandchild Node 1', leaf: true },
{ text: 'Grandchild Node 2', leaf: true }
]}
]
}
},
rootVisible: false, // Root node will not be visible
renderTo: Ext.getBody()
});
এখানে:
model
কনফিগারেশন ব্যবহার করে আমরা একটি মডেল যুক্ত করেছি।Ext.define('MyApp.model.TreeNode', {
extend: 'Ext.data.Model',
fields: ['text', 'leaf', 'expanded', 'children']
});
text
, leaf
, expanded
, এবং children
।ExtJS এ Tree Panel এর সাথে স্টোর ডেটা বাইন্ডিং করার মাধ্যমে, ডেটা আপডেট হলে UI কম্পোনেন্ট যেমন Tree Panel স্বয়ংক্রিয়ভাবে রিফ্রেশ হয়।
Ext.create('Ext.tree.Panel', {
title: 'Dynamic TreePanel with Data Binding',
width: 300,
height: 200,
store: {
xtype: 'tree',
model: 'MyApp.model.TreeNode',
root: {
text: 'Root Node',
expanded: true,
children: [
{ text: 'Child Node 1', leaf: true },
{ text: 'Child Node 2', leaf: true }
]
}
},
rootVisible: false,
renderTo: Ext.getBody()
});
var store = Ext.ComponentQuery.query('treepanel')[0].getStore();
store.getRoot().appendChild({ text: 'New Child Node', leaf: true });
Ext.tree.Panel
কম্পোনেন্টটি হায়ারারকিক্যাল ডেটা (গাছের আকারে) প্রদর্শন করতে ব্যবহৃত হয়।এভাবে, ExtJS তে Tree Panel এবং Data Binding ব্যবহার করে আপনি একটি ডাইনামিক এবং রিয়েল-টাইম হায়ারারকিক্যাল ডেটা ভিউ তৈরি করতে পারবেন।
ExtJS এ Tree Store এবং Nested Data ব্যবহার করে আপনি একটি ডাইনামিক ট্রি স্ট্রাকচার তৈরি করতে পারেন, যেখানে ডেটা হায়ারার্কিক্যাল (উপর-নিচ) আকারে উপস্থাপিত হয়। এটি সাধারণত ফাইল সিস্টেম, ক্যাটেগরি বা অন্যান্য হায়ারার্কিক্যাল ডেটার জন্য ব্যবহৃত হয়। Tree Store ডেটাকে পরিচালনা করতে ব্যবহৃত হয়, এবং এটি Model ও Proxy এর মাধ্যমে ডেটা লোড ও ম্যানেজ করতে সহায়ক।
এই গাইডে আমরা Tree Store তৈরি এবং Nested Data লোড করার পদ্ধতি দেখবো।
Tree Store ExtJS এ একটি স্টোর যা tree data structure কে ম্যানেজ করে। এটি parent-child relationships সহ ডেটা লোড এবং ম্যানেজ করার জন্য ব্যবহৃত হয়।
Ext.define('MyApp.store.TreeStore', {
extend: 'Ext.data.TreeStore',
model: 'MyApp.model.TreeNode', // মডেলটি TreeNode
proxy: {
type: 'memory', // মেমরি প্রক্সি, ডেটা সরাসরি কোডে লোড হবে
reader: {
type: 'json', // JSON ফরম্যাটে ডেটা রিড
rootProperty: 'children' // JSON ডেটার মূল অংশ
}
},
root: {
text: 'Root', // রুট নোডের টেক্সট
expanded: true, // রুট নোডটি এক্সপ্যান্ডেড থাকবে
children: [
{ text: 'Child 1', leaf: true },
{ text: 'Child 2', leaf: true },
{ text: 'Child 3', expanded: true, children: [
{ text: 'Grandchild 1', leaf: true },
{ text: 'Grandchild 2', leaf: true }
]}
]
}
});
extend: 'Ext.data.TreeStore'
: এটি TreeStore
কে প্রসারিত (extend) করে।proxy: { type: 'memory' }
: এখানে memory
প্রক্সি ব্যবহার করা হয়েছে, যেটি ডেটা সরাসরি কোডে লোড করবে (এটি অস্থায়ী ডেটা স্টোরেজের মতো কাজ করবে)।root
: রুট নোড এবং এর উপরের children। এখানে প্রতিটি নোডের জন্য টেক্সট, এক্সপ্যান্ডেড অবস্থা, এবং তার সন্তান (children) নির্ধারণ করা হয়েছে।TreeStore ব্যবহার করার জন্য একটি Model তৈরি করতে হবে, যা প্রতিটি নোডের ডেটা নির্ধারণ করবে।
Ext.define('MyApp.model.TreeNode', {
extend: 'Ext.data.Model',
fields: [
{ name: 'text', type: 'string' }, // নোডের টেক্সট
{ name: 'leaf', type: 'boolean' }, // যদি নোডটি লিফ (leaf) হয়
{ name: 'expanded', type: 'boolean' } // এক্সপ্যান্ডেড নোড
]
});
text
: নোডের টেক্সট।leaf
: এটি নিশ্চিত করে যে নোডটি একটি পাতার (leaf) নোড কিনা।expanded
: এটি নির্দেশ করে যে নোডটি ডিফল্টভাবে এক্সপ্যান্ডেড থাকবে কি না।ট্রি ডেটা প্রদর্শনের জন্য TreePanel
কম্পোনেন্ট ব্যবহার করা হয়। এটি Tree Store এর সাথে যুক্ত হয়ে ডেটা দেখানোর কাজ করে।
Ext.create('Ext.tree.Panel', {
title: 'Tree Example',
width: 400,
height: 300,
store: {
type: 'tree', // স্টোর টাইপ 'tree' হবে
model: 'MyApp.model.TreeNode', // এই মডেলটি ব্যবহার করা হবে
root: {
text: 'Root',
expanded: true,
children: [
{ text: 'Node 1', leaf: true },
{ text: 'Node 2', expanded: true, children: [
{ text: 'Child 1', leaf: true },
{ text: 'Child 2', leaf: true }
]}
]
}
},
rootVisible: false, // রুট নোডটি ভিজিবল হবে না
renderTo: Ext.getBody()
});
এখানে:
store
: এটি TreeStore ব্যবহার করছে, যার মধ্যে রুট এবং তার সন্তান (children) অন্তর্ভুক্ত।rootVisible: false
: রুট নোডটি UI তে প্রদর্শন হবে না, শুধুমাত্র তার সন্তানেরা (children) দেখানো হবে।প্রকৃত জীবনে, ট্রি ডেটা সাধারণত nested JSON ফরম্যাটে আসে। আপনি যদি সার্ভার থেকে ডেটা নিয়ে আসেন, তাহলে এটি JSON ফরম্যাটে থাকে যা parent-child relationship দেখায়।
{
"text": "Root",
"expanded": true,
"children": [
{ "text": "Node 1", "leaf": true },
{ "text": "Node 2", "expanded": true, "children": [
{ "text": "Child 1", "leaf": true },
{ "text": "Child 2", "leaf": true }
]}
]
}
Ext.define('MyApp.store.TreeStore', {
extend: 'Ext.data.TreeStore',
model: 'MyApp.model.TreeNode',
proxy: {
type: 'ajax', // AJAX মাধ্যমে সার্ভার থেকে ডেটা ফেচ
url: '/treeData', // সার্ভার থেকে JSON ডেটা লোড করার URL
reader: {
type: 'json',
rootProperty: 'children' // JSON ডেটায় children কে রুট হিসেবে ব্যবহার
}
},
root: {
text: 'Root',
expanded: true
}
});
এখানে:
type: 'ajax'
: AJAX পদ্ধতি ব্যবহার করে ডেটা লোড করা হচ্ছে।url: '/treeData'
: সার্ভার থেকে ডেটা ফেচ করার URL।reader
: JSON ডেটা থেকে children
অংশ রিড করার জন্য rootProperty
কনফিগার করা হয়েছে।ExtJS এর TreeStore ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন করা যায়।
var store = Ext.getStore('MyApp.store.TreeStore');
store.getRoot().appendChild({
text: 'New Node',
leaf: true
});
var node = store.getNodeById('nodeId');
node.set('text', 'Updated Node');
var node = store.getNodeById('nodeId');
node.remove();
এই পদ্ধতিগুলির মাধ্যমে আপনি খুব সহজে ডাইনামিক, ইন্টারেক্টিভ এবং হায়ারার্কিক্যাল ডেটা ডিসপ্লে করতে পারবেন।
ExtJS তে Tree কম্পোনেন্ট একটি শক্তিশালী উপাদান যা ডেটাকে হায়ারার্কিক্যালভাবে প্রদর্শন করতে ব্যবহৃত হয়। এটি বিশেষ করে ফাইল এক্সপ্লোরার বা ডিরেক্টরি স্ট্রাকচার, বা এমন কোনও সিস্টেম যেখানে আইটেমগুলির একটি অভ্যন্তরীণ সম্পর্ক রয়েছে, সেখানে ব্যবহৃত হয়। ExtJS তে Tree Node Editing এবং Dynamic Tree Creation বেশ কার্যকরী টুলস যা ডেভেলপারদের জন্য অত্যন্ত সুবিধাজনক।
Tree Node Editing এর মাধ্যমে আপনি একটি ট্রি নোডের তথ্য সম্পাদনা করতে পারেন। এটি সাধারণত ব্যবহারকারীদের কোনো নির্দিষ্ট ট্রি নোডের নাম, ধরন বা অন্যান্য প্রপার্টি পরিবর্তন করার সুযোগ দেয়। ExtJS তে Ext.tree.Panel
এর মাধ্যমে ট্রি কম্পোনেন্ট তৈরি করা যায় এবং editor
কনফিগারেশন ব্যবহার করে এটি এডিটিং সক্ষম করা হয়।
Ext.create('Ext.tree.Panel', {
title: 'Editable Tree Panel',
width: 400,
height: 300,
renderTo: Ext.getBody(),
store: Ext.create('Ext.data.TreeStore', {
root: {
expanded: true,
children: [
{ text: "Node 1", leaf: true },
{ text: "Node 2", expanded: true, children: [
{ text: "Node 2.1", leaf: true },
{ text: "Node 2.2", leaf: true }
]},
{ text: "Node 3", leaf: true }
]
}
}),
columns: [
{
xtype: 'treecolumn', // tree column type
text: 'Name',
flex: 1,
dataIndex: 'text',
editor: {
xtype: 'textfield' // Textfield for node editing
}
}
],
plugins: [{
ptype: 'treeediting', // enables tree node editing
pluginId: 'treeEditing',
clicksToEdit: 1 // Number of clicks required to edit a node
}],
listeners: {
edit: function(editor, e) {
console.log('Node Edited:', e.record.get('text'));
}
}
});
এখানে:
treeediting
প্লাগিন ব্যবহার করা হয়েছে যা ট্রি নোডের এডিটিং সক্ষম করে।clicksToEdit: 1
: এটি ট্রি নোডে একটি ক্লিক করলে সম্পাদনার জন্য প্রস্তুত করবে।editor
: textfield
এডিটরটি ব্যবহারকারীকে নোডের মান পরিবর্তন করতে দেয়।এটি ট্রি নোডে পরিবর্তন করার পর edit
ইভেন্ট ট্রিগার করবে, যা অ্যাপ্লিকেশনকে জানাবে যে নোডে কী পরিবর্তন হয়েছে।
Dynamic Tree Creation এর মাধ্যমে আপনি প্রোগ্রাম্যাটিক্যালি (অথবা ডাইনামিকভাবে) একটি ট্রি তৈরি করতে পারেন। এটি স্টোর বা API থেকে ডেটা লোড করার জন্য ব্যবহার করা হয়, এবং অ্যাপ্লিকেশন চালানোর সময় ট্রি স্ট্রাকচার পরিবর্তন করা যেতে পারে।
Ext.create('Ext.tree.Panel', {
title: 'Dynamic Tree Panel',
width: 400,
height: 300,
renderTo: Ext.getBody(),
store: Ext.create('Ext.data.TreeStore', {
root: {
text: 'Root Node',
expanded: true,
children: [] // Initially empty, will be dynamically filled
}
}),
columns: [
{
xtype: 'treecolumn', // tree column type
text: 'Name',
flex: 1,
dataIndex: 'text'
}
]
});
// Dynamically add nodes to the tree
function addNode() {
var treePanel = Ext.getCmp('treePanelId');
var rootNode = treePanel.getRootNode();
rootNode.appendChild({
text: 'New Dynamic Node',
leaf: true
});
}
// Adding nodes dynamically after 2 seconds
setTimeout(function() {
addNode();
addNode(); // Adding another node
}, 2000);
এখানে:
rootNode.appendChild
ব্যবহৃত হয়েছে একটি নতুন নোড অ্যাড করার জন্য।setTimeout
এর মাধ্যমে 2 সেকেন্ড পর ডায়নামিকভাবে নোড যোগ করা হয়েছে।আপনি Tree Node Editing এবং Dynamic Tree Creation একসাথে ব্যবহার করতে পারেন যাতে ব্যবহারকারী ট্রি নোডে ডেটা এডিট করতে পারে এবং ডাইনামিকভাবে নতুন নোডও তৈরি করতে পারে।
Ext.create('Ext.tree.Panel', {
title: 'Editable and Dynamic Tree Panel',
width: 400,
height: 300,
renderTo: Ext.getBody(),
store: Ext.create('Ext.data.TreeStore', {
root: {
text: 'Root Node',
expanded: true,
children: [] // Initially empty, will be dynamically filled
}
}),
columns: [
{
xtype: 'treecolumn', // tree column type
text: 'Name',
flex: 1,
dataIndex: 'text',
editor: {
xtype: 'textfield'
}
}
],
plugins: [{
ptype: 'treeediting', // enables tree node editing
pluginId: 'treeEditing',
clicksToEdit: 1
}],
listeners: {
edit: function(editor, e) {
console.log('Node Edited:', e.record.get('text'));
}
}
});
// Dynamically add nodes to the tree
function addNode() {
var treePanel = Ext.getCmp('treePanelId');
var rootNode = treePanel.getRootNode();
rootNode.appendChild({
text: 'New Dynamic Node',
leaf: true
});
}
// Adding nodes dynamically after 2 seconds
setTimeout(function() {
addNode();
addNode(); // Adding another node
}, 2000);
এখানে:
treeediting
প্লাগিন ব্যবহার করা হয়, যা ব্যবহারকারীদের ট্রি নোড এডিট করার সুযোগ দেয়।appendChild
ব্যবহার করা হয়।এই দুটি ফিচারের সমন্বয়ে একটি অত্যন্ত ইন্টারঅ্যাকটিভ এবং ডাইনামিক ট্রি তৈরি করা সম্ভব, যা একটি কার্যকর এবং ইউজার-বান্ধব এক্সপিরিয়েন্স প্রদান করে।
ExtJS একটি শক্তিশালী ফ্রন্টএন্ড ফ্রেমওয়ার্ক যা ইউজার ইন্টারফেস (UI) তৈরি করতে ব্যবহৃত হয়। এর মধ্যে Drag and Drop সমর্থন এবং Node Manipulation এর মতো ফিচার রয়েছে, যা অ্যাপ্লিকেশনের ইন্টারঅ্যাকশন এবং DOM (Document Object Model) নিয়ন্ত্রণ করার ক্ষমতা বৃদ্ধি করে। এই ফিচারগুলো অ্যাপ্লিকেশনকে আরও ইন্টারেক্টিভ, ব্যবহারকারী বান্ধব এবং কার্যক্ষম করে তোলে।
Drag and Drop (ড্র্যাগ এবং ড্রপ) হল একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ব্যবহারকারীদের UI এলিমেন্টগুলিকে এক স্থান থেকে অন্য স্থানে টেনে নিয়ে যাওয়ার ক্ষমতা দেয়। ExtJS তে Drag and Drop সমর্থন বেশ শক্তিশালী, এবং এটি বিভিন্ন কম্পোনেন্টের মধ্যে ডেটা স্থানান্তর করতে সহায়ক।
Ext.create('Ext.panel.Panel', {
title: 'Draggable Panel',
width: 300,
height: 200,
renderTo: Ext.getBody(),
draggable: true, // প্যানেলটি ড্র্যাগ করা যাবে
html: 'Drag this panel'
});
Ext.create('Ext.panel.Panel', {
title: 'Drop Target',
width: 300,
height: 200,
renderTo: Ext.getBody(),
style: { marginTop: '10px' },
html: 'Drop here',
listeners: {
render: function(panel) {
panel.getEl().on('drop', function(e) {
Ext.Msg.alert('Dropped', 'Item has been dropped!');
});
}
}
});
ব্যাখ্যা:
draggable: true
: এটি একটি প্যানেলকে ড্র্যাগযোগ্য করে তোলে।on('drop', ...)
: ড্রপ ইভেন্টে একটি ফাংশন কল করা হয় যখন প্যানেলটিতে ড্রপ করা হয়।Node Manipulation হল DOM (Document Object Model) এর মাধ্যমে HTML উপাদানগুলিকে প্রোগ্রাম্যাটিকভাবে পরিবর্তন করা। ExtJS তে Node Manipulation খুবই সহজ এবং এটি বিভিন্ন ডম উপাদানের সাথে ইন্টারঅ্যাক্ট করার জন্য শক্তিশালী API সরবরাহ করে।
Ext.DomQuery
: DOM নোড অনুসন্ধান করার জন্য ব্যবহৃত হয়।Ext.get
: DOM এলিমেন্টে সরাসরি অ্যাক্সেস করার জন্য ব্যবহৃত হয়।setHtml
, setText
: HTML বা টেক্সট কনটেন্ট পরিবর্তন করা।appendChild
, insertBefore
: নতুন উপাদান যোগ করা বা পুরনো উপাদান পরিবর্তন করা।Ext.create('Ext.button.Button', {
text: 'Click Me',
renderTo: Ext.getBody(),
handler: function() {
var node = Ext.get('myNode'); // DOM নোড নির্বাচন
node.setHtml('This is a new content!'); // HTML পরিবর্তন করা
}
});
Ext.create('Ext.Panel', {
id: 'myNode',
title: 'Panel',
html: 'Original Content',
renderTo: Ext.getBody()
});
ব্যাখ্যা:
Ext.get('myNode')
: এটি id='myNode'
সহ একটি DOM নোড নির্বাচন করে।setHtml()
: এই মেথডটি DOM নোডে HTML কনটেন্ট আপডেট করতে ব্যবহৃত হয়।ExtJS তে Drag and Drop API খুবই শক্তিশালী এবং এটি কাস্টম ড্র্যাগ এবং ড্রপ ইভেন্ট তৈরি করতে সহায়ক। ড্র্যাগ এবং ড্রপ করার সময়, আপনি কাস্টম কন্ডিশন চেক করতে পারেন, যেমন যদি ড্রপ এলিমেন্ট সঠিক হয় তবে ড্রপ হতে দেয় এবং না হলে ব্লক করে দেয়।
Ext.create('Ext.panel.Panel', {
title: 'Drag Me',
width: 200,
height: 100,
renderTo: Ext.getBody(),
draggable: {
moveOnEnter: true, // ড্র্যাগের সময় মুভমেন্ট
constrain: true // প্যানেলটি ড্র্যাগ করার সময় সীমাবদ্ধ রাখা
},
html: 'Drag me!'
});
Ext.create('Ext.panel.Panel', {
title: 'Drop Area',
width: 200,
height: 100,
style: { marginTop: '10px' },
renderTo: Ext.getBody(),
listeners: {
render: function(panel) {
panel.getEl().on('drop', function(e) {
Ext.Msg.alert('Dropped', 'You dropped something!');
});
}
}
});
ব্যাখ্যা:
draggable
: ড্র্যাগ করার সময় প্যানেলটি কীভাবে আচরণ করবে তা নির্ধারণ করে (যেমন, moveOnEnter এবং constrain এর মাধ্যমে সীমাবদ্ধ করা)।panel.getEl().on('drop', ...)
: প্যানেলটিতে ড্রপ ইভেন্ট শোনার জন্য ব্যবহার করা হয়।Ext.create('Ext.button.Button', {
text: 'Add Node',
renderTo: Ext.getBody(),
handler: function() {
// নতুন ডম নোড তৈরি
var newNode = Ext.create('Ext.Component', {
html: 'New Node Added'
});
// DOM এ নতুন নোড যোগ করা
Ext.get('myNode').appendChild(newNode.el);
}
});
Ext.create('Ext.Panel', {
id: 'myNode',
title: 'Container Panel',
html: 'Initial Content',
renderTo: Ext.getBody()
});
ব্যাখ্যা:
appendChild()
: এই মেথডটি DOM এ নতুন উপাদান (নোড) যোগ করতে ব্যবহৃত হয়।ExtJS তে এই ফিচারগুলো ব্যবহার করে আপনি অত্যন্ত ইন্টারেক্টিভ এবং ডাইনামিক ইউজার ইন্টারফেস তৈরি করতে পারেন, যা ব্যবহারকারীদেরকে আরও সহজে এবং কার্যকরীভাবে অ্যাপ্লিকেশনের সাথে ইন্টারঅ্যাক্ট করতে সহায়ক।
Read more